﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    public partial class PersonnelMainForm : Form
    {
        Control control;
        UserInfo m_userInfo;
        LoginForm parent;
        Boolean needsUpdate;

        public PersonnelMainForm(UserInfo _userInfo, LoginForm _parent)
        {
            needsUpdate = true;
            InitializeComponent();
            m_userInfo = _userInfo;
            parent = _parent;
            control = Control.getInstance();
        }

        private void InitializePacjenciListView()
        {
            lvPacjenci.Items.Clear();

            String connStr = "SELECT id_pacjent, imie, nazwisko, PESEL, wiek FROM pacjent;";
            System.Data.Odbc.OdbcDataReader result = control.ExecuteQuery(connStr);

            while (result.Read())
            {
                ListViewItem lvi = new ListViewItem();
                ListViewItem.ListViewSubItem lvsi1 = new ListViewItem.ListViewSubItem();
                ListViewItem.ListViewSubItem lvsi2 = new ListViewItem.ListViewSubItem();
                ListViewItem.ListViewSubItem lvsi3 = new ListViewItem.ListViewSubItem();
                ListViewItem.ListViewSubItem lvsi4 = new ListViewItem.ListViewSubItem();

                lvi.Text = result.GetInt32(0).ToString();
                lvsi1.Text = result.GetString(1);
                lvsi2.Text = result.GetString(2);
                lvsi3.Text = result.GetInt64(3).ToString();
                lvsi4.Text = result.GetInt32(4).ToString();

                lvi.SubItems.Add(lvsi1);
                lvi.SubItems.Add(lvsi2);
                lvi.SubItems.Add(lvsi3);
                lvi.SubItems.Add(lvsi4);

                lvPacjenci.Items.Add(lvi);
            }
        }

        private void zarejestrujNowegoPacjentaToolStripMenuItem_Click(object sender, EventArgs e)
        {
            RegisterPatientForm patientForm = new RegisterPatientForm();
            Control.getInstance().SwitchWindow(this, patientForm);
            needsUpdate = true;
        }

        private void wylogujToolStripMenuItem_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void lviPacjenci_ItemActivate(object sender, EventArgs e)
        {
        }

        private void PacjentUpdated(object sender, EventArgs e)
        {
            if (needsUpdate)
            {
                needsUpdate = false;
                InitializePacjenciListView();
            }
        }

        private void OnFormClose(object sender, EventArgs e)
        {
            Control.getInstance().CloseWindow(this);
        }

        private void edytujDanePacjentaToolStripMenuItem_Click(object sender, EventArgs e)
        {
            ListView.SelectedListViewItemCollection selected = lvPacjenci.SelectedItems;
            if (selected.Count > 0)
            {
                String choice = selected[0].Text;
                EditPatientForm patientForm = new EditPatientForm(System.Convert.ToInt32(choice));
                Control.getInstance().SwitchWindow(this, patientForm);
                needsUpdate = true;
            }
            else
            {
                MessageBox.Show("Wybierz pacjenta z listy!", "Nie wybrano pacjenta", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void usunDanePacjentaToolStripMenuItem_Click(object sender, EventArgs e)
        {
            ListView.SelectedListViewItemCollection selected = lvPacjenci.SelectedItems;
            if (selected.Count > 0)
            {
                int choice = System.Convert.ToInt32(selected[0].Text);
                String connStr = "SELECT imie, nazwisko FROM pacjent WHERE id_pacjent = " + choice + ";";
                System.Data.Odbc.OdbcDataReader result = control.ExecuteQuery(connStr);
                if (!result.Read())
                {
                    MessageBox.Show("Taki pacjent nie istnieje w bazie danych.", "Pacjent nie istnieje", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    return;
                }
                DialogResult delete = MessageBox.Show("Czy na pewno chcesz usunąć pacjenta " + 
                                                      result.GetString(0) + " " +
                                                      result.GetString(1) + " z bazy danych?", 
                                                      "Potwierdz usuniecie", 
                                                      MessageBoxButtons.YesNo, 
                                                      MessageBoxIcon.Question);

                if(delete.Equals(DialogResult.Yes))
                {
                    connStr = "DELETE FROM pacjent WHERE id_pacjent = " + choice + ";";
                    control.ExecuteStmt(connStr);
                    InitializePacjenciListView();
                    MessageBox.Show("Pomyślnie usunięto dane pacjenta", "Operacja pomyślna", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
            }
            else
            {
                MessageBox.Show("Wybierz pacjenta z listy!", "Nie wybrano pacjenta", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void zapiszPacjentaNaWizyteToolStripMenuItem_Click(object sender, EventArgs e)
        {
            ListView.SelectedListViewItemCollection selected = lvPacjenci.SelectedItems;
            if (selected.Count > 0)
            {
                Int32 choice = System.Convert.ToInt32(selected[0].Text);
                AssignPatientForm patientForm = new AssignPatientForm(choice);
                Control.getInstance().SwitchWindow(this, patientForm);
            }
            else
            {
                MessageBox.Show("Wybierz pacjenta z listy!", "Nie wybrano pacjenta", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void edytujGodzineWizytyPacjentaToolStripMenuItem_Click(object sender, EventArgs e)
        {
            ListView.SelectedListViewItemCollection selected = lvPacjenci.SelectedItems;
            if (selected.Count > 0)
            {
                Int32 choice = System.Convert.ToInt32(selected[0].Text);
                EditPatientAssignmentForm patientForm = new EditPatientAssignmentForm(choice);
                Control.getInstance().SwitchWindow(this, patientForm);
            }
            else
            {
                MessageBox.Show("Wybierz pacjenta z listy!", "Nie wybrano pacjenta", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }
    }
}
